package controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import org.codehaus.jackson.map.ObjectMapper;
import models.Dictionary;
import view.View;
public class Controller implements ActionListener {
Dictionary dictionary;
View view;
ObjectMapper mapper = new ObjectMapper();
public Controller() {
try {
InputStream input = new FileInputStream("dictionary.json");
dictionary = mapper.readValue(input, Dictionary.class);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("search")) {
String word = view.getWord();
ArrayList<String> result = dictionary.searchWord(word);
view.updateResultText(result);
} else if (e.getActionCommand().equals("addWord")) {
String word = JOptionPane.showInputDialog("Enter the word");
dictionary.addWord(word);
view.update(dictionary, view);
try {
mapper.writeValue(new FileOutputStream("dictionary.json"), dictionary);
} catch (IOException ex) {
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, view.getUpdate());
} else if (e.getActionCommand().equals("addSynonim")) {
String word = JOptionPane.showInputDialog("Enter word");
String synonim = JOptionPane.showInputDialog("Enter synonim");
if (dictionary.searchWord(word) != null) {
dictionary.addSynonim(word, synonim);
} else {
dictionary.addWord(word);
dictionary.addSynonim(word, synonim);
}
view.update(dictionary, view);
try {
mapper.writeValue(new FileOutputStream("dictionary.json"), dictionary);
} catch (IOException ex) {
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, view.getUpdate());
} else if (e.getActionCommand().equals("viewWords")) {
ArrayList<String> result = new ArrayList<String>();
for (String word : dictionary.getWords().keySet()) {
result.add(word.toUpperCase());
result.add("\n");
for (String synonim : dictionary.getWords().get(word)) {
result.add(synonim);
result.add("\n");
}
}
view.updateResultText(result);
} else if (e.getActionCommand().equals("deleteWord")) {
String word = JOptionPane.showInputDialog("Enter word");
dictionary.deleteWord(word);
view.update(dictionary, view);
try {
mapper.writeValue(new FileOutputStream("dictionary.json"), dictionary);
} catch (IOException ex) {
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, view.getUpdate());
}
}
public void addModel(Dictionary dictionary) {
this.dictionary = dictionary;
}
public void addView(View view) {
this.view = view;
}
}